#ifndef MI_HPP
#define	MI_HPP

#include <string>

using namespace std;

/**
 * Az MI függvények így néznek ki
 * @param palya A pálya egy char tömbben, x majd y koordinatak 0-tol indexelve.
 * @param szelessegX A pálya szélessége - X tengely.
 * @param magassagY A pálya magassága - Y tengely.
 * @param szimbolumok Milyen szimbólumok vannak a táblán? 0-üres, 1-saját, 2-ellenfél.
 * @param nszimbolum Konstans 3. // Későbbi használatra
 * @param x Ahova rakni szeretne az MI, annak az x koordinataja.
 * @param y Ahova rakni szeretne az MI, annak az Y koordinataja.
 * @return Konstans 0. // Későbbi használatra
 */
typedef int (*miFuggveny)(char**, int, int, char, int*, int*);

/**
 * MI-ket (egyenként) kezelő osztály
 */
class MI {
protected:
    /**
     * Az MI fájlneve
     */
    string fajlNev;
public:
    /**
     * Konstruktor
     * @param fn MI fájlneve
     */
    MI(string fn);
    /**
     * MI betöltése
     * @return igaz, ha sikerült a betöltés
     */
    bool betolt();
    /**
     * MI lépés lebonyolítása
     * @param map pálya
     * @param mapX pálya szélessége
     * @param mapY pálya magassága
     * @param self MI karaktere
     * @param x MI lépésének x koordinátája
     * @param y MI lépésének y koordinátája
     * @return 
     */
    bool lep(char **map, int mapX, int mapY, char self, int& x, int& y);
    /**
     * MI lépés lebonyolítása, ha az MI program
     * @param map pálya
     * @param mapX pálya szélessége
     * @param mapY pálya magassága
     * @param self MI karaktere
     * @param x MI lépésének x koordinátája
     * @param y MI lépésének y koordinátája
     * @return 
     */
    bool programLep(char **map, int mapX, int mapY, char self, int& x, int& y);
    /**
     * MI lépés lebonyolítása, ha az MI megosztott könyvtár
     * @param map pálya
     * @param mapX pálya szélessége
     * @param mapY pálya magassága
     * @param self MI karaktere
     * @param x MI lépésének x koordinátája
     * @param y MI lépésének y koordinátája
     * @return 
     */
    bool konyvtarLep(char **map, int mapX, int mapY, char self, int& x, int& y);
};

#endif	/* MI_HPP */
